home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / xobbs.arc / xomain.c < prev    next >
C/C++ Source or Header  |  1989-05-03  |  5KB  |  153 lines

  1. /* Version 1.1 of W2XO ax25bbs for use with KA9Q net  -Jim Durham, W2XO 2-14-89*/
  2. /* second release version... beware even more than before! */
  3. /* Code released to the Amateur Radio Packet community*/
  4.  
  5. #define MAIN 1
  6. #include "xobbs.h"
  7.  
  8. main(argc,argv)
  9.     int argc;
  10.     char * argv[];
  11. {
  12.     int fd1;        /*file discriptor*/
  13.     int c;            /* char holder */
  14.     char timstring[80];    /* log on time*/
  15.     char daepid[10];    /* mail daemon pid in ascii */
  16.     char *p;        /* char pointer for copy operations*/
  17.     FILE* fp;
  18.     char *gettim();        
  19.     int doquit();
  20.     void sndupkil();
  21.     
  22.     signal(SIGALRM,sndupkil);    /*set the watchdog timer*/
  23.  
  24.     umask(0);
  25.     
  26.     pid = getpid();
  27.  
  28.     if(argc < 2){        /* if somebody goofs and doesnt type call */
  29.         local=1;
  30.         sprintf(prinbuf,"xobbs: Usage:  xobbs calletters\n");
  31.         prinout(FLUSH);
  32.         sndupkil();
  33.     }
  34.  
  35.     if(argc < 3){        /* This is invoked from shell not NET */
  36.         outfd=1;
  37.         infd=0;
  38.         local=1;            /*local invocation*/
  39.     }
  40.     else{
  41.         rmsgqid=atoi(argv[2]);        /*remote invocation*/
  42.         smsgqid=atoi(argv[3]);        /*get message que id's*/
  43.     rcmsgqid=atoi(argv[4]);
  44.     scmsgqid=atoi(argv[5]);
  45.         local = 0;
  46.     }
  47.         
  48.     getconfig();                            /*read config information*/
  49.     gethighnum(0);                /*get highnum and msgnum*/
  50.  
  51.     if(!strcmp(argv[1],"forward")){
  52.         fwding=true;
  53.         local=false;
  54.         user.typ='F';                   /*dummy type 'F' for "forwarding"*/
  55.         alarm(500);            /*set the alarm*/
  56.     }
  57.     else{
  58.         getuser(argv[1]);            /*get the user info */
  59.         alarm(180);
  60.         sprintf(prinbuf,"[XOBBS-V1.2-$]\n");    /* system id for MBL/RLI */
  61.         prinout(NOFLUSH);
  62.  
  63.         if((user.typ != 'S') && (user.typ != 'B')){
  64.             if((fd1=open(motdfil,O_RDONLY)) < 0){ /*print error if no MOTD file*/
  65.                 sprintf(prinbuf,"Missing MOTD file\n");
  66.                 perror(prinbuf);
  67.             }
  68.             else{
  69.             fgetline(fd1,prinbuf);
  70.                 prinout(NOFLUSH);
  71.                 sprintf(prinbuf,"\n\n");
  72.                 prinout(NOFLUSH);
  73.             }
  74.             close(fd1);
  75.         } /*if not sysop or bbs */
  76.     } /*forwarding is not true*/
  77.  
  78.     fp=popen("ps -e | fgrep maildae","r");  /*get the pid of the maildaemon*/
  79.     p=daepid;
  80.     while(((c = getc(fp)) == ' ') && (c != EOF));
  81.     *p++ = c;
  82.     while(((c = getc(fp)) != ' ') && (c != EOF)){
  83.         *p++ = c;            /*get the ascii pid of daemon*/
  84.         putchar(c);
  85.     }
  86.     *p='\0';                /*terminate pid string*/
  87.     pclose(fp);                /*close the pipe*/
  88.     dpid=atoi(daepid);            /*make it a global int */        
  89.  
  90.     /*log in the user*/
  91.     strcpy(timstring,gettim());
  92.     if( (fd1=open(logfile,O_RDWR|O_CREAT,0666)) < 0)
  93.         perror("bbs:Can't open log file");
  94.     sprintf(prinbuf,"%s  %s\n",argv[1],timstring);
  95.     lseek(fd1,0L,2);
  96.     write(fd1,prinbuf,strlen(prinbuf));
  97.     close(fd1);
  98.     
  99.     /*greet the unsuspecting user */
  100.     if(!fwding){
  101.         if((user.typ != 'S') && (user.typ != 'B')){
  102.             sprintf(prinbuf,"Hi, %s, Welcome to the %s BBS\n",user.name,my.call);
  103.             prinout(NOFLUSH);
  104.             sprintf(prinbuf,"New to you:%d - %d,  %d Active Messages\n",user.highest,highnum,msgcnt);     
  105.             prinout(NOFLUSH);
  106.             sprintf(prinbuf,"Logged in at: %s \n",timstring);
  107.             prinout(NOFLUSH);
  108.         }
  109.         if(user.typ != 'B'){
  110.             mailcheck();            /*check for user's mail*/
  111.             sprintf(prinbuf,"High %d, Active %d \n",highnum,msgcnt);     
  112.             prinout(NOFLUSH);
  113.             if(dpid == 0){            /*warn user if mail daemon fails*/
  114.                 sprintf(prinbuf,"Mail forwarder not running\n mail saved but not added to list\n");
  115.             prinout(NOFLUSH);
  116.             }
  117.         }
  118.     }  /* if not a forwarding session*/
  119.      
  120.     for(;;){                /*main loop*/
  121.         switch(user.typ){            /*select proper prompt*/
  122.             case 'F':   alrmtim=600;
  123.                         break;
  124.             case 'B':
  125.         case 'b':   alrmtim = 600;
  126.                     sprintf(prinbuf,"%s BBS>\n",my.call);
  127.                     prinout(FLUSH);
  128.                     break;
  129.             case 'S':
  130.             case 's':
  131.             case 'E':
  132.         case 'e':   sprintf(prinbuf,"%s de %s BBS >\n",user.call,my.call);
  133.                     prinout(FLUSH);
  134.             break;
  135.             default:    sprintf(prinbuf,"%s de %s BBS (B,D,H,K,L,N,R,S,U,W) >\n",user.call,my.call);     
  136.                         prinout(FLUSH);
  137.                     break;
  138.     } /*end of switch*/
  139.  
  140.        if(!fwding){
  141.            do{
  142.                getline(0);
  143.            }while(inline[0] == '\0');
  144.        if(parse())
  145.                 docmd();        /*parse it and do what's needed*/
  146.         }
  147.         else
  148.             docmd();
  149.  
  150.     }    /*for(;;); */            /* and keep on looping*/
  151. }
  152.  
  153.